package com.qianfeng.springmvc.controller;


//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼            BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  


import com.qianfeng.springmvc.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**
 * Created by jackiechan on 2021/9/28 16:25
 *
 * @author jackiechan
 * @version 1.0
 * @since 1.0
 */
@Controller
public class TestController {
    /**
     * 假如说我们要传递一个 username=zhangsan&age=18 怎么获取
     * 之前 servlet 是通过 httpservletrequest获取的
     */
    @RequestMapping("/test1")
    public void test1(HttpServletRequest request) {
        String username = request.getParameter("username");
        String age = request.getParameter("age");
        System.err.println(username + "=======>" + age + "---->");
    }

    /**
     * 假如我们传递的还是 username 和 age 这两个参数
     * 只需要我们的方法的参数中写相同名字的参数,顺序无所谓, 比如我们的 username 是 String 类型 age 是 int 类型, 就可以向下面的写法
     * 只要保证名字一样就可以自动设置过来
     */
    @RequestMapping("/test2")
    public void test2(String username, int age) {
        System.err.println(username + "=的说法是电风扇的==>" + age + "---->");
    }

    /**
     * 如果我们传递的参数个数比较多,会导致方法的参数个数也比较多,并且传递的参数要增加就必须增加方法的参数,一点都不只能,耦合太高
     * java 是面向对象的语言,我们可不可以将数据封装到一个对象中呢
     * 假如说我们传递的参数包含 username, password, name ,email,phone,addr
     * 我们可以使用实体类的对象来接收数据,但是有一个要求, 请求的参数名必须和类中的属性保持一致
     */
    @RequestMapping("/test3")
    public void test3(User user) {
        System.err.println(user);
    }

    /**
     * 假如说我们传递的是同名的参数多个, 也就是说是数组
     * 参数名必须和请求中传递的参数名保持一致
     */
    @RequestMapping("/test4")
    public void test4(String[] hobby) {
        System.err.println(hobby);
        System.err.println(Arrays.toString(hobby));
    }

    /**
     * 比如当前操作是根据 id 获取某个数据的, 我们约定 你不需要通过 xxxx=xxx 的方式传,只要在我们的请求路径后添加参数的值就行了,我只要能拿到这个值我就知道什么意思
     */

    // user?id=1
//   {id} 占位符,意思就是说这里还需要一段路径,这个具体的路径的值会被赋值 id这个路径参数上面
    //比如你传递/user/10 ,我们期望这个 10可以传递到方法的 id 上面, 所以我们需要一个注解来帮我们声明
    //@PathVariable  路径变量, 就是说当前方法的参数是从请求路径中获取的,默认情况下会找和方法同名的占位符替代的路径
    @RequestMapping("/user/{id}")
    public void getUserById(@PathVariable Long id) {
        System.err.println("lujinghuacanshu 收到的参数是:===?" + id);
    }


    @RequestMapping("/user/{username}/{password}")
    public void getUserById(@PathVariable String username, @PathVariable String password) {
        System.err.println("lujinghuacanshu 收到的参数是:===?" + username + "---->" + password);
    }

    /**
     * 如果我们的参数名和路径中的占位符的名字不一致, 可以修改任意一方改成一致的,也可以 在PathVariable注解中添加参数 指定当前参数对应路径中的哪个占位符
     *
     * @param uname
     * @param pwd
     */
    @RequestMapping("/users/{username}/{password}")
    public void getUserBynameandpassword(@PathVariable("username") String uname, @PathVariable("password") String pwd) {
        System.err.println("阿道夫数据啊大飞哥撒旦法干撒单方事故 收到的参数是:===?" + uname + "---->" + pwd);
    }
    //rest 风格 restful

}
